﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using HerGoS.Documentos.Entities;
using HerGoS.ControlsUI;
using HerGoS.Administration.Engine;
using HerGoS.Documentos.Engine;
using HerGoS.Administration.Engine.Parametrizacion;
using System.Globalization;

namespace HerGoS.WebUI.Documentos
{
    public partial class Documentos_ABM : PageBase
    {
        #region Propiedades

        public Documento Documento
        {
            get
            {
                if (ViewState["Documento"] != null)
                    return (Documento)ViewState["Documento"];
                return null;
            }
            set
            {
                ViewState["Documento"] = value;
            }

        }

        #endregion


        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {               
                    LoadCombos();
                    hidFechaActual.Value = DateTime.Now.ToShortDateString();
                   
                    if (Request.QueryString["id"] == null)
                    {
                        try
                        {
                            Documento = new Documento();
                            this.txtNumero.ReadOnly = false;
                            this.txtAnio.ReadOnly = false;
                            this.txtCopia.ReadOnly = false;
                            
                        }
                        catch (Exception ex)
                        {
                        }
                    }
                    else
                    {
                        var Id = Convert.ToInt32(Request.QueryString["id"]);
                        Documento = GestorDocumentos.Obtener(Id);

                        this.txtNumero.Text = Documento.Numero.ToString();
                        this.txtAnio.Text = Documento.Ano.ToString();
                        this.txtCopia.Text = Documento.Copia.ToString();

                        this.txtNumero.BackColor = System.Drawing.Color.Silver;
                        this.txtAnio.BackColor = System.Drawing.Color.Silver;
                        this.txtCopia.BackColor = System.Drawing.Color.Silver;

                        this.cboEntidad.SelectedValue = Documento.Entidad == null ? "0" : Documento.Entidad.OID.ToString();
                        this.cboTipoDocumento.SelectedValue = Documento.TipoDocumento == null ? "0" : Documento.TipoDocumento.OID.ToString();
                        this.cboClase.SelectedValue = Documento.Clase == null ? "0" : Documento.Clase.OID.ToString();

                        if (Documento.PersonaFirmante != null)
                        {
                            this.txtPersonaFirmante.Text = Documento.PersonaFirmante.NombresYApellidos;
                            this.hidpersona.Value = Documento.PersonaFirmante.OID.ToString();
                        }
                        
                        this.cboLegajoDocumento.SelectedValue = Documento.LegajoDocumento == null ? "0" : Documento.LegajoDocumento.OID.ToString();
                        txtNumeroExterno.Text = Documento.NumeroExterno;
                        txtDescripcion.Text = Documento.Descripcion;
                        txtFechaExterna.Text = Documento.FechaExterna == null ? "" : Documento.FechaExterna.Value.ToShortDateString();
                        cboTema.SelectedValue = Documento.Tema == null ? "0" : Documento.Tema.OID.ToString();
                        cboMoneda.SelectedValue = Documento.Moneda == null ? "0" : Documento.Moneda.OID.ToString();
                        this.txtImporte.Text = Documento.Importe.ToString();
                        this.txtNumero.ReadOnly = true;
                        this.txtAnio.ReadOnly = true;
                        this.txtCopia.ReadOnly = true;

                    }
                    Initialize();
             
            }
        }
        void Initialize()
        {
            this.btnGuardar.Settings(new ButtonExtText());
            this.btnCerrar.Settings(new ButtonExtText());
            LoadAutoria(Documento);
        }

        //protected string GetNumero()
        //{
        //    return " " + "Numero" + "/" + "Ano" + "-" + "Copia";
        //     DisplayField = String.Format("{0} ({1})", x.Code, x.Description)
        //}


        private void LoadCombos()
        {
            this.cboEntidad.DataSource = GestorEntidades.Consultar();
            cboEntidad.DataTextField = "Denominacion";
            cboEntidad.DataValueField = "OID";
            cboEntidad.DataBind();
            cboEntidad.Items.Insert(0, new ListItem("--Ninguno-- ", "0"));

            this.cboTipoDocumento.DataSource = GestorTipoDocumentos.Consultar();
            cboTipoDocumento.DataTextField = "Descripcion";
            cboTipoDocumento.DataValueField = "OID";
            cboTipoDocumento.DataBind();
            cboTipoDocumento.Items.Insert(0, new ListItem("--Ninguno-- ", "0"));

            this.cboClase.DataSource = GestorClaseDocumentos.Consultar(null, null);
            cboClase.DataTextField = "Descripcion";
            cboClase.DataValueField = "OID";
            cboClase.DataBind();
            cboClase.Items.Insert(0, new ListItem("Seleccione... ", "0"));

            //this.cboPersonaFirmante.DataSource = GestorPersona.Consultar();
            //cboPersonaFirmante.DataTextField = "NombresYApellidos";
            //cboPersonaFirmante.DataValueField = "OID";
            //cboPersonaFirmante.DataBind();
            //cboPersonaFirmante.Items.Insert(0, new ListItem("--Ninguna-- ", "0"));

            var datasource = from x in  GestorLegajoDocumento.Consultar()
                             select new
                             {
                                 x.OID,
                                 DisplayField = String.Format("{0} / {1} - {2}", x.Numero, x.Ano,x.Copia)
                             };

            this.cboLegajoDocumento.DataSource = datasource;
            cboLegajoDocumento.DataTextField = "DisplayField";
            cboLegajoDocumento.DataValueField = "OID";
            cboLegajoDocumento.DataBind();
            cboLegajoDocumento.Items.Insert(0, new ListItem("--Ninguno-- ", "0"));

            var ObtenerMonedas = from x in GestorTipoMoneda.Consultar()
                             select new
                             {
                                 x.OID,
                                 DescripcionMoneda = String.Format("{0} ({1})", x.Codigo, x.Descripcion)
                             };


            this.cboMoneda.DataSource = ObtenerMonedas;
            cboMoneda.DataTextField = "DescripcionMoneda";
            cboMoneda.DataValueField = "OID";
            cboMoneda.DataBind();
            cboMoneda.Items.Insert(0, new ListItem("--Ninguno-- ", "0"));

           
            this.cboTema.DataSource = GestorTemas.Consultar();
            cboTema.DataTextField = "Descripcion";
            cboTema.DataValueField = "OID";
            cboTema.DataBind();
            cboTema.Items.Insert(0, new ListItem("--Ninguno-- ", "0"));


        }
        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            if (Documento.Persistencia == Interfaces.EstadoPersistencia.INSERT)
            {
                if (!string.IsNullOrEmpty(txtNumero.Text) ) 
                {
                    var result = GestorDocumentos.ExisteNumeroPorTipo(
                        this.txtNumero.Text.ToInteger(), this.cboTipoDocumento.SelectedValue.ToInteger(),this.txtCopia.Text.ToInteger(),
                        this.txtAnio.Text.ToInteger());
                    if (result)
                    {

                        var scriptNum = @"$(function(){{parent.MensajeNumeroDuplicado('{0}');}});";
                        scriptNum = string.Format(scriptNum, txtNumero.Text);
                        ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "closedialog", scriptNum, true);
                        return;

                    }

                    Documento.Numero = txtNumero.Text.ToInteger();
                    Documento.Ano = this.txtAnio.Text.ToInteger();
                    Documento.Copia = this.txtCopia.Text.ToInteger();

                }

                // si esta checkeado genero el legajo automaticamente
                if (this.chckGenerarLegajo.Checked)
                {
                    
                    LegajoDocumento legajoDocumento = new LegajoDocumento();

                    legajoDocumento.EntidadIniciadora = GestorEntidades.Obtener(this.cboEntidad.SelectedValue.ToInteger());
                    //revision celina: descripcion = referencia
                    legajoDocumento.Referencia = this.txtDescripcion.Text; 
                    legajoDocumento.FechaInicio = DateTime.Now;
                    GestorLegajoDocumento.Guardar(legajoDocumento);
                    Documento.LegajoDocumento = GestorLegajoDocumento.Obtener(legajoDocumento.OID);                   
                      
                                       
                }

                else 
                {
                     Documento.LegajoDocumento = GestorLegajoDocumento.Obtener(this.cboLegajoDocumento.SelectedValue.ToInteger());
                }

            }
                                 
            
             Documento.Entidad = GestorEntidades.Obtener(cboEntidad.SelectedValue.ToInteger());
            Documento.TipoDocumento= GestorTipoDocumentos.Obtener(this.cboTipoDocumento.SelectedValue.ToInteger());
            Documento.PersonaFirmante = GestorPersona.Obtener(hidpersona.Value.ToInteger());
          
            Documento.FechaExterna = (this.txtFechaExterna.Text=="") ? null : (DateTime?)this.txtFechaExterna.Text.ToDateTime();
            Documento.NumeroExterno =  txtNumeroExterno.Text;
            Documento.Descripcion =  txtDescripcion.Text;
            Documento.Tema = GestorTemas.Obtener(this.cboTema.SelectedValue.ToInteger());
            Documento.Moneda = GestorTipoMoneda.Obtener(this.cboMoneda.SelectedValue.ToInteger());
            Documento.Importe = this.txtImporte.Text.ToDecimal();
            Documento.Clase = GestorClaseDocumentos.Obtener(this.cboClase.SelectedValue.ToInteger());
            //Documento.Referencia = this.txtReferencia.Text;
            GestorDocumentos.Guardar(Documento);
            Documento =  GestorDocumentos.Obtener(Documento.OID);

            this.txtNumero.Text = Documento.Numero.ToString();
            this.txtAnio.Text =  Documento.Ano.ToString();
            this.txtCopia.Text = this.Documento.Copia.ToString();

            if (this.chckGenerarLegajo.Checked)
            {               
                string script = @"$(function(){{parent.FromLegajoDocumento('{0}','{1}');}});"; //se define {{ para poder usar el string.Format()
                var numerodoc = this.txtNumero.Text;
                var numeroleg = Documento.LegajoDocumento.Numero.ToString();
 
                script = string.Format(script, Documento.LegajoDocumento.Numero.ToString() ,numerodoc);

                ScriptManager.RegisterStartupScript(Page, typeof(Page), "closedialog", script, true);
                
                
            }
            else
            {
                var numero = this.txtNumero.Text;
                string script = @"$(function(){{parent.IntervaloCerrarPopup('{0}');}});"; //se define {{ para poder usar el string.Format()

                script = string.Format(script, numero);

                ScriptManager.RegisterStartupScript(Page, typeof(Page), "closedialog", script, true);
            }

        }

     
    
        protected void btnCerrar_Click(object sender, EventArgs e)
        {
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "closedialog", "parent.CerrarPopup();", true);
        }
    }
    }
